package cz.pecinovsky.česky.oopnz._115_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;

// %I + <119
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
// %I -

import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;


//import static cz.pecinovsky.česky.oopnz._115_._116_Šipka_119.Šipka;
  import static cz.pecinovsky.česky.oopnz._115_.Šipka_120_124.Šipka;


//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí: Není__Toto_je_nově_definovaná_třída
 *
 * Přidáno:
 *      *
 * Upraveno:
 *      *
 *</pre>
 */
public class ŠipkaTest_117_124
{ static
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída {@code ŠipkaTest}  slouží ke komplexnímu otestování
 * třídy {@link ŠipkaTest}.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class ŠipkaTest extends junit.framework.TestCase
{
//%X+ <119
    private SprávcePlátna SP;
//%X-
    private Šipka šipka0;
    private Šipka šipkaXY;
    private Šipka šipkaXYB;
//%X+ <122
    private Šipka šipkaXYP;
    private Šipka šipkaXYPB;
//%X-



//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public ŠipkaTest( String název )
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Inicializace předcházející spuštění každého testu a připravující tzv.
     * přípravek (fixture), což je sada objektů, s nimiž budou testy pracovat.
     */
    @Override
    protected void setUp()
    {
        šipka0     = new Šipka();
        šipkaXY    = new Šipka( 50,  50);
        šipkaXYB   = new Šipka(100, 100, Barva.MODRÁ);
//%X+ <122
        šipkaXYP   = new Šipka(  0, 100, 100);
        šipkaXYPB  = new Šipka(100,   0, 100, Barva.MODRÁ);
//%X-
//%X+ <119

        SP = SprávcePlátna.getInstance();
        SP.přidej(šipka0);
        SP.přidej(šipkaXY);
        SP.přidej(šipkaXYB);
//%X-
//%X+ <122
        SP.přidej(šipkaXYP);
        SP.přidej(šipkaXYPB);
//%X-

        IO.zpráva("Šipky připraveny");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//%X+ <123

    /***************************************************************************
     * Vyzkouší změny pozice a velikosti zadaného auta
     */
    private void pomPoziceVelikost(Šipka s)
    {
        final int ms = 500;
        s.setPozice(150, 150);
        IO.čekej(ms);
        s.setModul(150);
        IO.čekej(ms);
        s.setModul(25);
        IO.čekej(ms);
        SP.odstraň(s);
        IO.čekej(ms);
    }

//%X-
//%X+ <123


//%X-
//== INTERNÍ DATOVÉ TYPY =======================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }
//%X+ <118


    public void testPrůsvitná()
    {
        Obdélník podklad = new Obdélník(25, 25, 100, 100, Barva.BÍLÁ);
//%X-
//%X+ <119
        SP.přidejPod(šipka0, podklad);

//%X-
//%X+ <118
        šipka0   .průsvitná();
        šipkaXY  .průsvitná();
        šipkaXYB .průsvitná();
//%X-
//%X+ <122
        šipkaXYP .průsvitná();
        šipkaXYPB.průsvitná();
//%X-
//%X+ <118

        IO.zpráva("Ověř průsvitnost");

        šipka0   .vraťBarva();
        šipkaXY  .vraťBarva();
        šipkaXYB .vraťBarva();
//%X-
//%X+ <122
        šipkaXYP .vraťBarva();
        šipkaXYPB.vraťBarva();
//%X-
//%X+ <118
     }
//%X-
//%X+ <124


    public void testPlynuléPosuny()
    {
        šipka0   .průsvitná();
        šipkaXY  .průsvitná();
        šipkaXYB .průsvitná();
        šipkaXYP .průsvitná();
        šipkaXYPB.průsvitná();
        Přesouvač p = new Přesouvač(10);
        p.přesunNa(250,   0, šipka0);
        p.přesunNa(250,  50, šipkaXY);
        p.přesunNa(250, 100, šipkaXYB);
        p.přesunNa(200, 100, šipkaXYP);
        p.přesunNa(200,   0, šipkaXYPB);
    }
//%X-
//%X+ <123


    public void testPoziceVelikost()
    {
        pomPoziceVelikost(šipka0);
        pomPoziceVelikost(šipkaXY);
        pomPoziceVelikost(šipkaXYB);
        pomPoziceVelikost(šipkaXYP);
        pomPoziceVelikost(šipkaXYPB);
    }
//%X-
//%X+
     /** */
     public void testPřípravek() {}
//%X-
}
//%%-  ----- Začátek ignorovaného závěrečného textu -----
//%== //Takto se označí řádek, jenž bude odkomentován (vhodné např. pro importy)
//Je-li na 6 pozici mezera, odmaže se také

//== TESTY A METODA MAIN =======================================================
    private ŠipkaTest_117_124() {}

    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//            Plátno.smažPlátno();
//            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Run.tests(ŠipkaTest.class,
                new TearDown(),
//                "testPřípravek",
//                "testPrůsvitná",
//                "testPoziceVelikost",
                "testPlynuléPosuny",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
